Learn in 10 minutes

Learn in 10 minutes

Impara MATLAB in 10 Minuti

Programming Language

MATLAB (Matrix Laboratory) è un linguaggio di programmazione di alto livello e un ambiente progettato per il calcolo numerico, lo sviluppo di algoritmi e la visualizzazione dei dati. Sviluppato alla fine degli anni ‘70, MATLAB è diventato uno strumento fondamentale nell’ingegneria, nella scienza e nella matematica.

Questa guida copre le basi di MATLAB e ti aiuta a iniziare con questo potente ambiente di calcolo.

1. Il Tuo Primo Programma MATLAB

Crea un file script chiamato hello.m oppure digita i comandi direttamente nella finestra dei comandi MATLAB.

disp('Hello, World!')

Oppure usando la funzione fprintf:

fprintf('Hello, World!\n')

L’output sarà:

Hello, World!

La funzione disp() visualizza il contenuto direttamente, mentre fprintf() offre un controllo di formattazione maggiore, simile al printf del C.

2. Sintassi di Base

MATLAB ha le sue regole di sintassi che differiscono dalla maggior parte dei linguaggi di programmazione general-purpose. Capire queste basi è essenziale per scrivere codice pulito e manutenibile.

2.1 Commenti

I commenti su una singola riga iniziano con il simbolo del percento %:

% This is a comment
x = 10;  % This assigns 10 to x

I commenti multi-riga usano %{ e %}:

%{
This is a multi-line comment.
It can span multiple lines.
%}

2.2 Punto e Virgola

Il punto e virgola ; sopprime la visualizzazione dell’output. Senza di esso, MATLAB mostra il risultato:

x = 5     % Displays: x = 5
y = 10;   % No output, but y is assigned

2.3 Distinzione Maiuscole/Minuscole

MATLAB è case-sensitive. A e a sono variabili diverse:

A = 5;
a = 10;
disp(A)  % Output: 5
disp(a)  % Output: 10

2.4 Nomi delle Variabili

I nomi delle variabili devono iniziare con una lettera, seguiti da lettere, numeri o underscore:

valid_name = 1;
another_valid_name_123 = 2;
% 123invalid = 3;  % Error: cannot start with number

2.5 Operazioni di Base

MATLAB eccelle nelle operazioni matriciali. Creare una matrice è semplice:

A = [1 2 3; 4 5 6; 7 8 9]  % 3x3 matrix

Output:

A =

     1     2     3
     4     5     6
     7     8     9

3. Variabili e Tipi di Dati

MATLAB usa il typing dinamico. Le variabili vengono create quando vengono assegnate e il loro tipo è determinato dal valore assegnato.

3.1 Tipi Numerici

MATLAB memorizza tutti i numeri come floating point a doppia precisione per impostazione predefinita:

% Integer
int_num = 42;

% Float
float_num = 3.14159;

% Scientific notation
sci_num = 2.5e-3;  % 0.0025

3.2 Stringhe

Le variabili stringa usano gli apici singoli:

str = 'Hello, MATLAB';
str2 = "Hello, MATLAB";  % String array (R2016b+)

Concatenazione di stringhe:

str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2];  % 'Hello, World'

3.3 Logici (Boolean)

I valori logici sono true o false:

flag = true;
result = false;

% Logical operations
a = true;
b = false;
and_result = a && b;    % false
or_result = a || b;     % true
not_result = ~a;        % false

3.4 Array di Caratteri vs Stringhe

MATLAB ha sia array di caratteri che oggetti stringa:

% Character array (older style)
char_arr = 'Hello';

% String object (modern style, R2016b+)
str_obj = "Hello";

% String objects are easier to work with
name = "Alice";
greeting = "Hello, " + name;  % Works naturally

4. Strutture Dati

MATLAB offre diverse strutture dati per diversi casi d’uso.

4.1 Vettori

Un vettore è un array monodimensionale:

% Row vector
row_vec = [1 2 3 4 5];

% Column vector
col_vec = [1; 2; 3; 4; 5];

% Using colon operator
range_vec = 1:5;        % [1 2 3 4 5]
step_vec = 0:2:10;      % [0 2 4 6 8 10]

% linspace for evenly spaced values
lin_vec = linspace(0, 10, 5);  % [0 2.5 5 7.5 10]

4.2 Matrici

Le matrici sono il fondamento di MATLAB:

% Direct matrix creation
A = [1 2 3; 4 5 6; 7 8 9];

% Accessing elements
element = A(2, 3);  % Returns 6 (row 2, column 3)

% Matrix operations
B = A';            % Transpose
C = A * B;         % Matrix multiplication
D = A .* B;        % Element-wise multiplication

4.3 Cell Array

I cell array possono contenere tipi di dati diversi:

% Create a cell array
cell_arr = {1, 'hello', [1 2 3], true};

% Access cell contents using curly braces
data = cell_arr{2};  % Returns 'hello'

% Access cell using parentheses
sub_cell = cell_arr(1:2);  % Returns {1, 'hello'}

4.4 Strutture

Le strutture sono come dizionari con campi denominati:

% Create a structure
student.name = 'John';
student.age = 20;
student.major = 'Engineering';

% Access fields
disp(student.name);  % Output: John

% Array of structures
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;

4.5 Tabelle

Le tabelle sono adatte per dati tabulari:

% Create a table
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];

T = table(Name, Age, Salary);

% Access data
disp(T.Age);
disp(T.Name{1});

5. Operatori

MATLAB offre vari operatori per operazioni aritmetiche, di confronto e logiche.

5.1 Operatori Aritmetici

a = 10;
b = 3;

sum = a + b;           % 13
diff = a - b;          % 7
prod = a * b;          % 30
quot = a / b;          % 3.3333
int_div = floor(a/b);  % 3
mod = mod(a, b);       % 1 (remainder)
pow = a ^ b;           % 1000

5.2 Operatori Element-wise

Gli operatori element-wise lavorano sugli elementi corrispondenti:

A = [1 2 3];
B = [4 5 6];

C = A .* B;  % Element-wise: [4 10 18]
D = A.^2;    % Element-wise square: [1 4 9]

5.3 Operatori di Confronto

x = 5;
y = 10;

eq = (x == y);    % false
neq = (x ~= y);   % true
gt = (x > y);     % false
lt = (x < y);     % true
ge = (x >= y);    % false
le = (x <= y);    % true

5.4 Operatori Logici

a = true;
b = false;

and_op = a & b;     % false (element-wise AND)
or_op = a | b;      % true (element-wise OR)
not_op = ~a;        % false
and_short = a && b; % false (short-circuit AND)
or_short = a || b;  % true (short-circuit OR)

6. Controllo del Flusso

MATLAB offre strutture di controllo del flusso standard, ma con una sintassi diversa dai linguaggi come Python.

6.1 if-elseif-else

score = 85;

if score >= 90
    grade = 'A';
elseif score >= 80
    grade = 'B';
elseif score >= 70
    grade = 'C';
else
    grade = 'F';
end

disp(grade)  % Output: B

6.2 switch

L’istruzione switch confronta una singola espressione con più casi:

day = 'Monday';

switch day
    case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
        disp('Weekday');
    case {'Saturday', 'Sunday'}
        disp('Weekend');
    otherwise
        disp('Invalid day');
end

6.3 Cicli for

Il ciclo for itera su un intervallo o array:

% Iterating over a range
for i = 1:5
    disp(i);
end

% Iterating over an array
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
    disp(fruit{1});
end

% Nested loops for matrix operations
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
    for j = 1:2
        B(i, j) = A(i, j) * 2;
    end
end

6.4 Cicli while

count = 0;
while count < 5
    disp(count);
    count = count + 1;
end

6.5 Controllo dei Cicli

L’istruzione break esce dal ciclo, e continue salta all’iterazione successiva:

% Using break
for i = 1:10
    if i == 5
        break;
    end
    disp(i);
end
% Output: 1 2 3 4

% Using continue
for i = 1:5
    if mod(i, 2) == 0
        continue;  % Skip even numbers
    end
    disp(i);
end
% Output: 1 3 5

7. Input e Output

7.1 Input dell’Utente

Usa la funzione input() per ottenere l’input dell’utente:

% Get numeric input
num = input('Enter a number: ');

% Get string input
name = input('Enter your name: ', 's');

% Get expression input (evaluates the input)
expr = input('Enter an expression: ');

7.2 Visualizzazione dell’Output

Diverse funzioni visualizzano l’output:

% disp - simple display
disp('Hello');
disp([1 2 3]);

% fprintf - formatted output
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);

% sprintf - create formatted string
str = sprintf('Value: %.2f', 3.14159);
disp(str);

7.3 Specificatori di Formato

Specificatori di formato comuni in MATLAB:

% %s - string
% %d - integer
% %f - floating point
% %.2f - floating point with 2 decimal places
% %e - scientific notation

fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Output: 42 3.14 1.000000e+03

8. Funzioni

Le funzioni in MATLAB sono tipicamente definite in file separati, ma le funzioni anonime forniscono creazione di funzioni inline.

8.1 Funzioni Anonime

Le funzioni anonime creano funzioni semplici senza file separati:

% Single input
square = @(x) x^2;
disp(square(5));  % Output: 25

% Multiple inputs
add = @(x, y) x + y;
disp(add(3, 4));  % Output: 7

% Multiple expressions
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4));  % Output: 5

8.2 File di Funzione

Crea un file chiamato myfunc.m:

function y = myfunc(x)
    y = x^2 + 1;
end

Chiama la funzione:

result = myfunc(5);  % Output: 26

8.3 Funzioni con Multipli Output

function [sum, prod] = calc(x, y)
    sum = x + y;
    prod = x * y;
end

Chiama con multipli output:

[s, p] = calc(3, 4);
disp(s);  % 7
disp(p);  % 12

8.4 Argomenti Variabili

Usa varargin e varargout per argomenti variabili:

function result = sum_all(varargin)
    result = 0;
    for i = 1:length(varargin)
        result = result + varargin{i};
    end
end

% Call with any number of arguments
total = sum_all(1, 2, 3, 4, 5);  % Output: 15

9. File Script

Gli script sono file .m che contengono una sequenza di comandi MATLAB. Operano sui dati nel workspace:

% save as myscript.m
% Calculate statistics for a dataset
data = [1 2 3 4 5 6 7 8 9 10];

mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);

fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);

10. Gestione degli Errori

Usa try-catch per la gestione degli errori:

try
    result = risky_operation();
catch ME
    fprintf('Error: %s\n', ME.message);
    % Handle the error
    result = 0;
end

Usare error() per sollevare errori:

function result = divide(a, b)
    if b == 0
        error('Division by zero is not allowed');
    end
    result = a / b;
end

11. Operazioni sui File

11.1 Salvataggio e Caricamento dei Dati

% Save variables to file
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');

% Load variables from file
load('data.mat');

% Save to text file
writematrix(x, 'data.txt');

% Read from text file
data = readmatrix('data.txt');

11.2 Operazioni su File di Testo

% Write to text file
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);

% Read from text file
fid = fopen('output.txt', 'r');
while ~feof(fid)
    line = fgetl(fid);
    if ischar(line)
        disp(line);
    end
end
fclose(fid);

Usare textscan per lettura strutturata:

fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);

name = C{1};
age = C{2};
score = C{3};

12. Grafici

Le capacità di plotting di MATLAB sono una delle sue caratteristiche più forti.

12.1 Grafici 2D Base

x = 0:0.1:2*pi;
y = sin(x);

plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;

12.2 Multipli Grafici

x = 0:0.1:2*pi;

% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');

subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');

12.3 Personalizzazione dei Grafici

x = 0:0.1:10;
y1 = x;
y2 = x.^2;

plot(x, y1, 'b-', 'LineWidth', 2);  % Blue solid line
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Red dashed line
hold off;

xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;

12.4 Altri Tipi di Grafici

% Bar chart
bar([1 2 3 4], [10 20 15 25]);

% Histogram
data = randn(1000, 1);
histogram(data, 30);

% Scatter plot
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);